<?php

/**
 * DadosUsuario form.
 *
 * @package    form
 * @subpackage DadosUsuario
 * @version    SVN: $Id: sfDoctrineFormTemplate.php 6174 2007-11-27 06:22:40Z fabien $
 */
class DadosUsuarioForm extends BaseDadosUsuarioForm
{
	public $cliente;

	public function configure()
	{

		parent::configure();

		$this->widgetSchema['id_usuario']			= new sfWidgetFormInputHidden();
		$this->widgetSchema['id_usuario_pai']		= new sfWidgetFormInputHidden();

		$this->widgetSchema['username']        	= new sfWidgetFormInput(
			array(),
			array(
				'class'	=>"{required:true, messages:{required:'O campo Nome de usuário é obrigatório.'}}",
				'value'	=> (!$this->getObject()->isNew()) ? $this->getObject()->sfGuardUser->username : ""
			)
		);

        $endereco   				= $this->getObject()->DadosEndereco;
		$endereco->DadosUsuario		= $this->getObject();
		$form_endereco 				= new EnderecoForm($endereco);
		$this->embedForm('endereco', $form_endereco);

		if(!$this->getObject()->isNew())
		{
			$this->widgetSchema['password']         = new sfWidgetFormInputPassword(array()) ;
			//$this->widgetSchema['password2']     	= new sfWidgetFormInputPassword(array(), array('class'=>"{equalTo: '#dados_usuario_password', messages:{equalTo: 'O campo tem que ser igual ao campo SENHA.'}}")) ;

		}
		else
		{
			$this->widgetSchema['password']         = new sfWidgetFormInputPassword(array(), array('class'=>"{required:true, messages:{required:'O campo SENHA é obrigatório.'}}")) ;
			$this->widgetSchema['password2']     	= new sfWidgetFormInputPassword(array(), array('class'=>"{required:true, equalTo: '#dados_usuario_password', messages:{required:'O campo CONFIRMAÇÃO DE SENHA é obrigatório.', equalTo: 'O campo tem que ser igual ao campo SENHA.'}}")) ;
        }

		$this->widgetSchema['dt_nascimento']    = new sfWidgetFormInput(array(), array('class'=>"is_date_picker")) ;
		$this->widgetSchema['cliente']     		= new sfWidgetFormInputHidden(array()) ;
		$this->widgetSchema['no_usuario']       = new sfWidgetFormInput(array(), array('size' => 50,'class'=>"{required:true, messages:{required:'O campo Nome Completo é obrigatório.'}}")) ;
		$this->widgetSchema['sobrenome']        = new sfWidgetFormInput(array(), array('required' => false, 'size' => 50));
		$this->widgetSchema['email']         	= new sfWidgetFormInput(array(), array('size' => 50));
		$this->widgetSchema['nu_cpf']           = new sfWidgetFormInput(array(), array('class'=>"cpf {required:true, messages:{required:'O campo CPF é obrigatório.'}}")) ;
		$this->widgetSchema['sexo']             = new sfWidgetFormChoice(array("choices"=>array("M" => "Masculino", "F" => "Feminino")));
		$this->widgetSchema['st_estado_civil']  = new sfWidgetFormChoice(array("choices"=>array("S" => "Solteiro(a)", "C" => "Casado(a)", "D" => "Divorciado(a)", "V" => "Viúvo(a)", "O" => "Outro(a)")));
		$this->widgetSchema['ddd_tel_celular']  = new sfWidgetFormInput(array(), array('class'=>"input_ddd")) ;
		$this->widgetSchema['ddd_tel_fixo']  	= new sfWidgetFormInput(array(), array('class'=>"input_ddd {required:true, messages:{required:'O campo DDD do TELEFONE FIXO é obrigatório.'}}")) ;
		$this->widgetSchema['tel_fixo']  		= new sfWidgetFormInput(array(), array('class'=>"tel {required:true, messages:{required:'O campo TELEFONE FIXO é obrigatório.'}}")) ;
		$this->widgetSchema['tel_celular']  	= new sfWidgetFormInput(array(), array('class'=>"tel")) ;

		$this->widgetSchema['nu_cpf_pai']		= new sfWidgetFormInput(array(), array('class'=>"cpf")) ;
		$this->widgetSchema['nu_cpf_mae']   	= new sfWidgetFormInput(array(), array('class'=>"cpf")) ;

        $this->validatorSchema["dt_nascimento"] = new sfValidatori18nDate(array('required' => false));


        if($this->getObject()->isNew())
        {
        	$this->widgetSchema['password']         = new sfWidgetFormInputPassword(array(), array('class'=>"{required:true, messages:{required:'O campo SENHA é obrigatório.'}}")) ;
			$this->widgetSchema['password2']     	= new sfWidgetFormInputPassword(array(), array('class'=>"{required:true, equalTo: '#dados_usuario_password', messages:{required:'O campo CONFIRMAÇÃO DE SENHA é obrigatório.', equalTo: 'O campo tem que ser igual ao campo SENHA.'}}")) ;
        }

		// Don't print passwords when complaining about inadequate length
		$this->setValidator('password', new sfValidatorString(array(
				      'required' => ($this->getObject()->isNew()),
				      'trim' => true,
				      'min_length' => 6,
				      'max_length' => 128
				), array(
				      'min_length' => 'Senha muito curta, deve ter no mínimo %min_length% caracteres.')));

		// Se for novo valida as senhas
		if($this->getObject()->isNew())
		{
			$this->setValidator('password2', new sfValidatorString(array(
					      'required' => ($this->getObject()->isNew()),
					      'trim' => true,
					      'min_length' => 6,
					      'max_length' => 128
					), array(
					      'min_length' => 'Senha muito curta, deve ter no mínimo %min_length% caracteres.')));
		}


		$this->setValidator('cliente', new sfValidatorString(array('required' => false)));

		$this->setValidator("nu_cpf", new sfValidatorCpfCnpj(array("type"=>"cpf", 'required' => true)));
		$this->setValidator("nu_cpf_pai", new sfValidatorCpfCnpj(array("type"=>"cpf", 'required' => false)));
		$this->setValidator("nu_cpf_mae", new sfValidatorCpfCnpj(array("type"=>"cpf", 'required' => false)));

        if($this->getObject()->isNew())
        {
	            $this->setValidator(
	                    'email',
	                    new sfValidatorAnd(array(
	                            new sfValidatorEmail(array('required' => false, 'trim' => true)),
	                            new sfValidatorString(array('required' => false, 'max_length' => 80)),
	                            new sfValidatorDoctrineUnique(array(
	                                    'model' => 'DadosUsuario',
	                                    'column' => 'email'
	                            ),
	                            array(
	                                    'invalid' => 'O email indicado já está sendo usado por outro usuário.')
	                            )
	                    )
	                )
	            );

                $this->setValidator(
                        'username',
                        new sfValidatorAnd(array(
                                new sfValidatorString(array('required' => false, 'max_length' => 80)),
                                new sfValidatorDoctrineUnique(array(
                                        'model' => 'sfGuardUser',
                                        'column' => 'username'
                                ),
                                array(
                                        'invalid' => 'O Login selecionado já encontra-se em uso.')
                                )
                        )
                )
            );
        }
        else
        {
        	$this->setValidator('username', new sfValidatorString(array('required' => true)));
            $this->setValidator(
                    'email',
                    new sfValidatorAnd(array(
                            new sfValidatorEmail(array('required' => false, 'trim' => true)),
                            new sfValidatorString(array('required' => false, 'max_length' => 80))
                    )
                )
            );
        }

        $schema = $this->validatorSchema;

        $postValidator = $schema->getPostValidator();
		$postValidators = array();
        // so valida se for um novo cadastro
		if($this->getObject()->isNew())
		{
	        $postValidators = array(
		        new sfValidatorSchemaCompare(
		        	'password',
		        	sfValidatorSchemaCompare::EQUAL,
		        	'password2',
		        	array(),
		        	array('invalid' => 'Senhas diferentes.')
		        )
	        );
		}

        if (isset($postValidator))
        {
        	$postValidators[] = $postValidator;
        }

        $this->validatorSchema->setPostValidator(new sfValidatorAnd($postValidators));

        $this->widgetSchema->setLabels(array(
                                      'nu_cpf'           	=> 'CPF',
                                      'no_usuario'       	=> 'Nome completo',
                                      'sobrenome'     	 	=> 'Sobrenome',
                                      'dt_nascimento' 	 	=> 'Data de nascimento',
      								  'nu_rg'			 	=> 'RG',
      								  'tel_fixo'		 	=> 'Telefone Fixo',
      								  'tel_celular'		 	=> 'Telefone Celular',
      								  'password'		 	=> 'Senha',
      								  'password2'		 	=> 'Confirme sua senha',
                                      'groups_list'      	=> "Grupos",
                                      'permissions_list' 	=> "Permissões",
      								  'username'		 	=> 'Login',
      								  'no_usuario_pai'		=> 'Nome do Pai',
      								  'nu_cpf_pai'		 	=> 'CPF do Pai',
      								  'st_estado_civil'		 => 'Estado Civil',
      								  'no_usuario_mae'		 => 'Nome da Mãe',
      								  'nu_cpf_mae'		 	=> 'CPF da Mãe',
      								  'nu_renda'		 	=> 'Renda (R$)',
      								  'nu_tempo_residencia'	=> 'Tempo de residência',
      								  'ds_profissao'		 => 'Profissão',
      								  'st_conjuge'			=> "Cônjuge ou companheito há mais de 2 anos?"
      								));


      	$this->validatorSchema->setOption('allow_extra_fields', true);

	}

	public function saveEmbeddedForms($con = null, $forms = null)
	{
		//die($this->getValue('endereco'));
		if (null === $forms)
		{
			$midia 		= $this->getValue('midia');
			$endereco	= $this->getValue('endereco');
			$forms 		= $this->embeddedForms;

			if(isset($this->embeddedForms['midia']))
			{
				foreach ($this->embeddedForms['midia'] as $name => $form)
				{
					if (!isset($midia[$name]))
					unset($forms['midia'][$name]);
				}
			}

			if(isset($this->embeddedForms['endereco'] ))
			{
				foreach ($this->embeddedForms['endereco'] as $name => $form)
				{
					if (!isset($endereco[$name]))
						unset($forms['endereco'][$name]);
				}
			}
		}

		return parent::saveEmbeddedForms($con, $forms);
	}



	public function setValidate($validate)
	{
		$this->validate = $validate;
	}

	public function doSave($con = null)
	{

//		echo "<pre>";
//		print_r($this->embeddedForms['endereco']);
//		die;

		if($this->getValue('tp_usuario') == "")
		{
			$user   = ($this->getValue('id_usuario')) ? Doctrine::getTable('sfGuardUser')->find($this->getValue('id_usuario')) : new sfGuardUser();
			$user->setUsername($this->getValue('username'));
			$user->setPassword($this->getValue('password'));
			$user->setIsActive(true);
			$user->save();
		}

		//Caso usuário seja cadastrado pelo portal - CLIENTE
		if($this->getValue('cliente'))
		{
		 	$this->idUsuario = $user->getId();
		 	parent::doSave($con);
		 	$user->addGroupByName("cliente");
		 	$user->addPermissionByName("cliente");
		 	return;
		}
		else
		{
			$this->idUsuario = $user->getId();

			return parent::doSave($con);
		}
	}

	public function updateObject($values = null)
	{
		$object = parent::updateObject($values);
		$object->setIdUsuario($this->idUsuario);

		// Don't break subclasses!
		return $object;
	}
}